package com.inside.demo01;

import com.Interfaces.ordinary.Person;

// 演示成员内部类
// Outer 为外部类 Inner 内部类
public class Outer {
    // 私有属性
    private String name = "ymb";
    private String address = "地址信息";

    // 成员内部类 也是可以继承操作
    public class Inner extends Person {
        // 访问外部类的私有属性
        private String name = "内部ymb";
        private String phone = "158****5251";
        // 不可以修饰静态属性 -- 报错 不能声明
        //private static int money = 100;
        // 可以修饰有静态常量
        private static final int grade = 100;

        public void show() {
            // 访问外部类属性
            // 可以直接访问外部属性
            System.out.println(address);
            // 方式二：外部类.this.属性
            System.out.println(Outer.this.address);
            // 当外部类和内部类存在 同名属性时，优先访问内部类
            System.out.println(name); // 内部ymb
            // 访问内部类属性
            System.out.println(phone); // 方式一
            System.out.println(this.phone); // 方式二
            System.out.println("内部类方法");
            // 访问外部类的方法 -- 方式一
            Outer.this.outShow();
            // 访问外部类的方法 --  方式二
            outShow();
        }
        // 内部方法
        public void go() {
            System.out.println("go() 方法！");
        }
    }

    private class Fruits {}

    // 外部类方法
    public void outShow() {
        System.out.println("访问外部类方法！");
    }

    // 访问内部类方法
    public void test() {
        // 内部实例化
        Inner inner = new Inner();
        inner.go();
        new Fruits();
    }
}
